#ifndef S_GRASP_STS
#define S_GRASP_STS

#include "Solucao.h"
#include "ListaSolucao.h"

class ListaSolucao;

class SolucaoGRASPSTS : public Solucao{
	
	private:
		int cliAlocado;
		//Custo da ligacao de clientes ao nos Steiner
		double fc();
		//Custo da ligacao entre nos Steiner (Kruskal)
		double fl();
		//Custo da ativação do no Steiner
		double fs();
		//Penaliza a solucao se a mesma nao atender a capacidade dos nos ativos 
		double validate();
		//Custo Medio guloso da ativacao dos clientes ao no Steiner 
		double gc(int pos);
		double gl(int pos);
		double gs(int pos);
	
	public:
		SolucaoGRASPSTS *getVizinho(int mov);
		//SolucaoGRASPSTS *getVizinho(int mov);
		SolucaoGRASPSTS *getSWAP(int i, int j);
		int mov; //Indica a posicao onde ocorreu o movimento da solucao
		SolucaoGRASPSTS(int tam);
		SolucaoGRASPSTS(SolucaoGRASPSTS *sol);
		SolucaoGRASPSTS(char *);
		void init();
		bool todosClientesAlocados();
		double f();
		double g(int);
		void setElemento(int);
		SolucaoGRASPSTS *getVizinhosADD();
		SolucaoGRASPSTS *getVizinhosDROP();
		SolucaoGRASPSTS *getVizinhosSWAP();
};

#endif

